<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //   正常的
    function sum(a, b) {
        return a + b
    }
    // 或者
    let sum = function (a, b) {
        return a + b
    }

    // 箭头函数就是
    let sum = (a, b) => a + b


    let app = n => a * 2;
    // 等同
    let app = function (n) {
        return a * 2
    }
    //  如果没有参数，括号将是空的（但括号应该保留）：

    let sayHi = () => alert("Hello!");

    sayHi();

    // 动态创建一个
    let age = prompt('wewe', 15)
    let pper = (age < 18) ? () => alert(22) : () => alert(666)

    let sum = (a, b) => {  // 花括号表示开始一个多行函数
        let result = a + b;
        return result; // 如果我们使用了花括号，那么我们需要一个显式的 “return”
    };

    alert(sum(1, 2)); // 3


    let user = {
  name: "John",
  age: 30,
  isAdmin: true
};

for (let key in user) {
  // keys
  alert( key );  // name, age, isAdmin
  // 属性键的值
  alert( user[key] ); // John, 30, true
}
// 注意，所有的 “for” 结构体都允许我们在循环中定义变量，像这里的 let key。

// 同样，我们可以用其他属性名来替代 key。例如 "for(let prop in obj)" 也很常用。
// 复制一个对象变量会创建指向此对象的另一个引用。

// 那如果我们需要复制一个对象呢？创建一份独立的拷贝，一份克隆？

// 这也是可行的，但是有一点麻烦，因为 JavaScript 中没有支持这种操作的内置函数。实际上，我们很少这么做。在大多数时候，复制引用都很好用。

// 但如果我们真想这么做，就需要创建一个新的对象，然后遍历现有对象的属性，在原始级别的状态下复制给新的对象。

// 像这样：



// let user = {
//   name: "John",
//   age: 30
// };

// let clone = {}; // 新的空对象

// // 复制所有的属性值
// for (let key in user) {
//   clone[key] = user[key];
// }

// // 现在的复制是独立的了
// clone.name = "Pete"; // 改变它的值

// alert( user.name ); // 原对象属性值不变



















</script>